/*
 * UVa 10082
 * WERTYU
 *
 * 把手放在键盘上时，稍不注意就会往右错一位。
 * 这样，输入Q会变成输入W，输入J会变成输入K等。
 * 键盘如下：
 * ` 1 2 3 4 5 6 7 8 9 0 - = BackSpace
 * TAB Q W E R T Y U I O P [ ] \
 *      A S D F G H J K L ; ' Enter
 *       Z X C V B N M , . /
 *
 * 输入一个错位后敲出的字符串（所有字母均大写），
 * 输出打字员本来想打出的句子。
 * 输入保证合法，
 * 即一定是错位之后的字符串。
 * 例如输入中不会出现大写字母A。
 *
 * 样例输入：
 * O S, GOMR YPFSU/
 * 样例输出：
 * I AM FINE TODAY.
 */

#include <iostream>
#include <string>
#define LOCAL
using namespace std;
const string
    keybroadValue("`1234567890-=\b"
                  "\tQWERTYUIOP[]\\"
                  "ASDFGHJKL;\'\n"
                  "ZXCVBNM,./");
int main()
{
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    int ch;
    size_t pos; // 存字符在键盘中的位置
    while ((ch = getchar()) != EOF)
    {
        if (isspace(ch))
            putchar(ch);
        else
        {
            pos = keybroadValue.find(ch);
            if (pos == string::npos)
                printf("(%c)", ch); // 键盘上没找到字符
            else
                putchar(keybroadValue[pos - 1]); // 找到，输出前一个字符
        }
    }
    return 0;
}

// 课本答案
// #include <cstdio>
// char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
// int main()
// {
//     int i, c;
//     while ((c = getchar()) != EOF)
//     {
//         // 找字符在常量表中的位置
//         for (i = 1; s[i] && s[i] != c; ++i)
//             ;
//         if (s[i])
//             putchar(s[i]); // 如果找到，输出它的前一个字符
//         else
//             putchar(c);
//     }
//     return 0;
// }